package helloworld;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import org.junit.Test;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * Customer
 * 消费者
 * @author 丛有志
 * @date 2020/11/8 17:42
 * <p>
 * 版本        修改时间        作者        修改内容
 * V1.0        2020/11/8     丛有志        初始版本
 */
public class Customer {
    public static void main(String[] args) throws IOException, TimeoutException {

        // 创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 设置连接rabbitmq主机
        connectionFactory.setHost("39.105.42.229");
        // 设置端口
        connectionFactory.setPort(5672);
        // 设置连接哪个虚拟主机
        connectionFactory.setVirtualHost("/ems");
        // 设置访问虚拟主机的用户名
        connectionFactory.setUsername("ems");
        // 设置密码
        connectionFactory.setPassword("123");
        // 获取连接对象
        Connection connection = connectionFactory.newConnection();
        // 创建通道
        Channel channel = connection.createChannel();
        // 通道绑定对象
        channel.queueDeclare("hello",false,false,false,null);
        // 消费消息
        // 参数1：消费哪个队列消息 队列名称
        // 参数2：开始消息的自动确认机制
        // 参数3：消费时的回调
        channel.basicConsume("hello",true,new DefaultConsumer(channel){
            // 处理消息时回调
            // 最后一个参数：消息队列中取出的消息
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("new String(body)"+new String(body));
            }
        });
        // 不建议关闭-因为关闭之后监听不到,希望一直监听
        // helloWorld适合点对点登录，发送短信使用
    }
}